                             - 194 -

                4.   .

         , PCjr
- ,  EGA - .         
[4.1.2].         
 ,           
 .        EGA
    -,   -
,         
   .
          PCjr.   
(  )         
 .    2 ,  16  - 4 (8--
    ,   ,   
          8  ). 
      200 .    
(   PCjr)   160   -
,   -   (320 )    -
 -    (640  ).     ,
      [4.5.3].
    -    PCjr     16
 .    .   
        ,     
       16 ,   
         
.  0  ,    , 
 1 - ,   .
           4-6  8-A 
       .   
     ,     
        ,      -
      ( ,     
 ).   16-  PCjr   32K
   ,         
  .
     4-        
    0,      
 .        -
   ..     80 .  81- 
      2.   16- 
    ,      
160            
  .       
      0000  1F3FH,  
-  2000H  3F3FH.   1F3FH  2000H .
 PCjr     ,  
        .   PCjr -
    ,    16K,    
 B800H      ,  
 .       ,
        PCjr.
      EGA  DH  10H   
-.    ,     -
,      ,   --
   ,  :   
     ,    -

                             - 195 -

     ,     
    7      . -
      ,    
    .        4 ,
   16 .  . 4-4  
  .
            .  
   ,   BIOS   
,    .      
        -
 .    . BIOS    -
     ,    
 .        , -
      ,  ,    
      .

                             - 196 -

   4.4.1     .

   PCjr  EGA       -,   
.       ,    
   ,       
.         
     .
                 
,           
:

                          

      0                     0000             
      1                     0001             
      2                     0010             
      3                     0011             
      4                     0100             
      5                     0101             
      6                     0110             
      7                     0111             
      8                     1000             
      9                     1001             
      10                    1010             
      11                    1011              
      12                    1100             
      13                    1101              
      14                    1110             
      15                    1111             

               
  .      
  .     
        .     
    16.      -
     ,      
 .   :

              0     1

       0             00                 
       1             01                 
       2             10                 
       3             11      / 

   -      ,  
      .  -
   ,      , -
  ,       -
   ,          
 ,    (    
  ).         
  "  "     .   

                             - 197 -

      ,  , 
     .       
      ,      -
  ,      
 .  ,  BIOS     -
  ,     -
.     0040:0066H.       
  ; ,     -
  ,       , 
    .
        .  , -
   ,     ,   
    .     -
       .    
      ,    
  .    [4.1.3].
   EGA  PCjr        
 ,   ,     .
 16-     ,       
      ,     
      .   
       16  .  
      ,  ,
       .    16  
  0100,     ,   
   ,     .  -
   0        .  
. 4-1  [4.1.3]   .   -  -
           
.
           
   ,       .
           
.        ,  
  ,   ,   
 .  ,  ,     
(0000)       1110,    -
   ,       15 ( -
     ).     
 15  0000 (  ),   . 
         ,       
 1110,     0000,    . 
    ,     
 15    1110.    ,     
  ,       
,     , -
   .
   EGA   6   ,   4, 
         
IBM.     64 ,   -
 R'G'B'RGB. R, G  B     ,  R', G' 
B' - .    64 .   -
, 111111   ,  000000 - .  -

                             - 198 -

,      EGA   64 ,
  ,         .    
 4-  (   )  
 4  ,      .

    .

         ,  
   COLOR  ,     .
   ,      0  15,   
  0  1.  , COLOR 2,1  
  (#2)            1.
         
 : 1 - , 2 -   3 -  (  -
  PAINT).        
 SCREEN ,1.  ,      
           -
 . PCjr   COLOR   
    SCREEN 1.     SCREEN 3  SCREEN 6  
  COLOR ,.      -
     1  15  16-    1   3
-  4-.      0,   -
    .
         :
PALETTE  PALETTE USING. PALETTE   -
  .  , PALETTE 9,11   , 
      9 ( ) 
   11 ( ).    
       , ..  -
 0  0,  12 - 12  ..     
PALETTE. ,        SCREEN  4  SCREEN 6 
   ,    1-3
  ,    1    .
    .
    16       -
 PALETTE USING.  PALETTE  USING    16--
     .    
        -
.            0
 15,  -1,           
.   ,      -
 ,    ARRAYNAME(0)  =  15, ARRAYNAME(1) = 14 
..    PALETTE USING ARRAYNAME(0)   -
 ARRAYNAME       .  0 
   ,      -
  .        , 
        ,   
      16 .  PALETTE USING ARRAY-
NAME(12)   ,   12-  . -
,   PALETTE USING    ,   
 .  :

                             - 199 -

100 DEF INT A-Z         '  
110 DIM SCHEME1(16)     '    #1
120 DIM SCHEME2(16)     '    #2
130 DATA 3,5,9,2,4,12,15,1,6,7,14,13,8,11,10,0
140 DATA 0,11,13,7,1,12,2,5,10,8,14,6,15,4,9,3
150 FOR N = 0 TO 15     '   
160 READ Q              '  
170 SCHEME1(N) = Q      '    
180 NEXT                '
190 FOR N = 0 TO 15     '     
200 READ Q              '
210 SCHEME2(N) = Q      '
220 NEXT                '
230 PALETTE USING SCHEME1(0)  ' 
 .
500 PALETTE USING SCHEME2(0)  '   

    .

     BH  10H    , 
   -     .      
     BH 0,      0  15   BL.
         BH 1,   BL 0  1. 
        -
 0:

;---    
   MOV  AH,0BH        ;  
   MOV  BH,0          ;   
   MOV  BL,3          ; 
   INT  10H           ; 
   MOV  BH,1          ;  
   MOV  BL,1          ;  1
   INT  10H           ; 

    PCjr         4- ,
    1-3      ,  
 .  2-  0  BL  
,   1,  1 - .       -
,   16- .    
       BH 0,   BL - 
.

    .

               "
 "   3D9H.     
 -,    (  [4.1.3]). 
0-3          (-
 ,       ).
 5  ,     0,    
0.         .  
   ,     
      ,     .

                             - 200 -

   MOV  DX,3D9H          ;   
   MOV  AL,00100110B     ;      1
   OUT  DX,AL            ; 

           ,    
     PCjr   EGA.        
    .  PCjr   
 10H  1FH.       
   3DAH.      
   .     
 ,        .  
,             
. ,       (1001)  
 2:

;---       2
   MOV  DX,3DAH         ;   
   IN   AL,DX           ;  
   MOV  AL,12H          ; 
   OUT  DX,AL           ;  
   MOV  AL,00001001B    ;  
   OUT  DX,AL           ; 

 EGA       - 3C0H,   
  00   0FH.          3DAH ( 
3C0H),   ,    .  
 EGA           
    ,      
6- .

                             - 201 -

   4.4.2     (,   PCjr).

           
       .
  ,       ,    
          ,  
  .     -
    ,      ,
        
  .         
    ,       
  4  8 .    ,     -
    .

    .

        PSET  PRESET    
  .     PointSET (-
 )  PointRESET ( ).   .  
      ,  ,
  .  ,      
x,y - ..     ,     ;  
       LOCATE,   -
   . PSET(50,80)  PRESET(50,80) -
      50   80.     PSET
   ,     , -
   .      ,  -
     ,       
.  PRESET   .     
  ( 0). :

100 PSET(100,180),3   '  3  
110 PRESET(100,180)   '    

   PSET  PRESET      ,  
       0,0.   WINDOW
     ,  ,
      -100,100,    -
0,0,      -  100,-100.      
       WINDOW(-100,100)-(100,-100).   (
             25*80  (
25*40),    LOCATE    -
  [4.2.1].)
        LINE  [4.4.5],       
    (  x). -
     ,    ,  
     .        
  (     ).  
,           
   WINDOW(100,-100)-(-100,100),      -100 
    .

                             - 202 -

            
 .  ,      
  ,    ,      
.        (    
)      y   -
  .         
,        
  .       SCREEN,
, WINDOW SCREEN(-100,100)-(100,-100).
         ,      
   .   ,     
     ,        
 .  ,  ,   WIN-
DOW          
  .     ,  
,    .
     PMAP        
   "" ,  
WINDOW. PMAP    :

   0          x  ""   
   1          y  ""   
   2          x     ""
   3          y     ""

    PMAP(,).  ,  ,
     ""   WINDOW.
         (-100,100),   
 - (100,-100).      -
 (0,0)      320*200,  
         0,0?   X
 X = PMAP(0,0),  Y -  Y = PMAP(0,1).  
 X = 160,  Y = 100.

    .

    CH  10H    .   DX 
,   CX - ,    0.    -
  AL.  ,    AX    -
 .        ,
    AX      
.

;---    100,180
   MOV  AH,0CH        ;  
   MOV  AL,3          ;  3 
   MOV  CX,100        ;
   MOV  DX,180        ;
   INT  10H           ; 
;--- 
   MOV  AH,0CH        ; 
   MOV  AL,0          ;    
   MOV  DX,100        ;
   MOV  CX,180        ;
   INT  10H           ; 

                             - 203 -

                  AL,
    .     1,   
       .  -
,         
           .
      1    0,  
 0.     ,   
   .          
 ,     .  -  16--
 ,   ,       
.  ,   4-    
     1  (  01B)
  2  (10B).  ,    
       11B? 01B 
 10B,  10B   01B -   .

    .

            -
 (  ).     -
  ()    ()  ,  ,
   .      -
  .   ,     -
       PCjr,        
16- ,     32K,  
  ,    B800H    
.       , -
    2000H.
           -
       .    -
   CX,   -  DX.    0  CX 
0,      .       
  0    .       
 ,      2000H  -
     .
        2,   
         80, ..
    80 .      -
  SHL,         
,    ,      
.
    ,          
,             ,
   .     
   (     )  
  .        ,
       , ,     
  .        2    
    ,    .
           ,  -
 ,      . 
         4,
    -   8.       
:      ,    
   /    .   
     .

                             - 204 -

   ,       
.       ,      
    .      
      .    
     OR   .  
         .

;---  
PALETTE_COLOR  DB   2

;--- 
   MOV  AX,0B800H         ;  
   MOV  ES,AX             ;
   MOV  CX,100            ; 
   MOV  DX,180            ; 
   CALL SET_DOT           ;
    .
    .
;---     
SET_DOT     PROC
            TEST CL,1              ;  ?
            JZ   EVEN_ROW          ; ,  
            MOV  BX,2000H          ;   
            JMP  SHORT CONTINUE    ; 
EVEN_ROW:   MOV  BX,0              ;   
CONTINUE:   SHR  CX,1              ;    2
            MOV  AL,80             ;  80
            MUL  CL                ; AX -  
;---     
            MOV  CX,DX             ;  
            NOT  CL                ; 
            AND  CL,00000011B      ; CL -   (0-3)
            SHL  CL,1              ;   
;---    
            SHR  DX,1              ;    4
            SHR  DX,1              ;(   )
;---    
            ADD  AX,DX             ;   
            ADD  BX,AX             ;
;---   
            MOV  AH,ES:[BX]        ;  
            ROR  AH,CL             ;   
            AND  AH,11111100B      ;  2 
            MOV  AL,PALETTE_COLOR  ;    
            OR   AH,AL             ;
            ROL  AH,CL             ; 
            MOV  ES:[BX],AH        ; 
            RET                    ;
SET_DOT     ENDP

                             - 205 -

   4.4.3     (EGA).

    EGA   .      
 0-7   ,     -
   PCjr,    DH  10H  .
       ,    
     ,   
.  . 4-4  [4.4.0].
      D, E  10H    4    .
     ,   --
     ,  -
  [4.4.2]:           
  ,        ,
       , 
  7    .      
 ,          -
.    ,     -
  ( 16 ),     -
    .
         4   ,  -
      ?      
,            
.          -
  4 ,       
.       -
   ,    , -
            
 .
             
   (latch register).    -
       ,    
 . (,       -
     ,    -
 ,         .) 
      ,   
        , 
          
.           
     ,    -
   .     -
            
    .     
,          
,      .
            -
  ,        
   ,     .  -
          ,    
 3CFH.     8   3CEH,  
  .      1  
       ,    
    .  ,  
      ,    ""  
       .     
     ,  -

                             - 206 -

   ,     
      .       
       .
         3C5H.   -
  .        
2  .  0-3       
  0-3;  4    .   
 0-3  0,         -
   .    -
   ,     .
           , 
      ,        
3CFH,         5  
.       0  1,    0
 2.   2     0,      4-7.   3
        .   
   0  1. BIOS EGA     00.

     0:
         0   
     .  ,   -
      11111111B    
     (..    -
   ).       -
    1,        
     1111B.     ,  8 
    15,    -
 ,       ,    
      .
           ,      
00001000B.      3  1111,   
- 0000,    ().    
   3    (),  
7    .     7   
  - ,       
 0000.
       ,  1111B.    
           ,  
     ,  
   .  ,       
 0100,   0100    .   
 0, 1  3   .      -
   11111111B,         
  2         0100.
      00001000B,   3  
  0100,    - 0000.
   , ,  .    
  ,    . , 
  0   ,   
1   3   .       
 ,    11111111B   -
,     2   11111111B,   
 0     ,     
     0101B.   ,   
      .  -

                             - 207 -

 ,        (..
     )  ,     
  1111B  0000B.        0 
  .        -
     .
            
 .        ?   
, ,         
  ,          
       .   -
       ,  
 .       0,  
         
 ,       .  
     0  1 -   ;  
   2,      ,  ,
       0FFH  4H,  
 ,     2 .   2 -
,   0         
.
    ,       -
,        8 . 
   (  [4.4.4])     
 .       
       .  , 
  ,   .
             
 0.             
.       
      .   -
       -
 :

    2-0         
        4-3        00       
                   01         
                   10         
                   11         
        7-5         

     ,          0  7, 
      ,   
  .      .  ,
 4-3,    00,  ,  
 .         
            -
    .      
   3   3CEH;     
3CFH.
   ,   0     - 
  /.         
      /  (  
   3CFH,    0  3CEH).  -
    /, 
      ,   

                             - 208 -

  1.   4    / ,
     8      -
   ,       -
.       /,  
    . ,  
     /  -
 ,           
 /.  BIOS   -
 /   0,       .  
 3CFH,     1   3CEH.

  1:
     1    .  
        -
  .  ,      
 .        
    .     
       .      
     -    
    .

  2:
      2     
 .    ,    -
    4  ,      
(  ).    ,    
    .     
  ,      ,    
        -
.    ,      0. -
     ,    4 
.

    .

     EGA     -
 .       -
  EGA   .       
,         ,
      A000:0000.     
     .      
    :

10 S$ = CHR$(&H2A)+CHR$(&HE4)+CHR$(&HB0)+CHR$(&H0D)
        +CHR$(&HCD)+CHR$(&H10)+CHR$(&HCB)
20 DEF SEG                  ' 
30 Y = VARPTR(S$)           '  
40 Z = PEEK(Y+1)+PEEK(Y+2)*256  '  
50 CALL Z                   ' 

  S$   ,     D.
    .        
     .    , 
   ,       
.            
 .

                             - 209 -

           .  
   2:

50 OUT &H3CE,5         '   
60 OUT &H3CF,2         '  2

            
.
   ,   ,   
 :

  0:

100 '       
110 DEF SEG = &HA000     '  
120 OUT &H3CE,8          '   
130 OUT &H3CF,128        '  ,  
140 X = PEEK(0)          '    
150 POKE 0,0             '
160 OUT &H3C4,2          '   
170 OUT &H3C5,4          '  
180 POKE 0,&HFF          ' 

  1:

100 '     
110 DEF SEG = &HA000     '  
120 FOR N = 0 TO 79      '  80  
130 X = PEEK(N)          ' 
140 POKE N+80,Y          '   
150 NEXT                 '   

  2:

100 '       
110 DEF SEG = &HA000     '  
120 OUT &H3CE,8          '   
130 OUT &H3CF,128        '  ,  
140 X = PEEK(0)          '    
150 POKE 0,4             '  

    .

   EGA     BIOS.   
     CH  10H,    
    PCjr.    DX    
,  CX -  ,         0.
    AL.   AX   
.

;---    50,100
   MOV  AH,0CH        ;  
   MOV  AL,12         ;   12
   MOV  CX,100        ; 
   MOV  DX,50         ; 
   INT  10H           ; 

                             - 210 -

    .

           .   -
      ,  
   A000:0000.     -
  BIOS, ,    D:

   MOV  AH,0       ;  
   MOV  AL,0DH     ;  D
   INT  10H        ; 

      . 
,       .  -
    2:

   MOV  DX,3CEH    ;   
   MOV  AL,5       ;  5
   OUT  DX,AL      ; 
   INC  DX         ;   
   MOV  AL,2       ;   2
   OUT  DX,AL      ; 

   , ,    :

  0:

;---       
   MOV  AX,0A000H      ;  
   MOV  ES,AX          ;
   MOV  BX,0           ;    
;---  ,  
   MOV  DX,3CEH        ;   
   MOV  AL,8           ; 
   OUT  DX,AL          ; 
   INC  DX             ;   
   MOV  AL,10000000B   ;
   OUT  DX,AL          ; 
;---   
   MOV  AL,ES:[BX]     ;   
   MOV  AL,0           ;  
   MOV  ES:[BX],AL     ; 
;---      
   MOV  DX,3C4H        ;   
   MOV  AL,2           ;   
   OUT  DX,AL          ; 
   INC  DX             ;   
   MOV  AL,4           ; 
   OUT  DX,AL          ;  
;--- 
   MOV  AL,0FFH        ;    7 
   MOV  ES:[BX],AL     ; 

                             - 211 -

  1:

;---    
          MOV  CX,80       ;   
          MOV  BX,0        ;  1-  
          MOV  AX,0A000H   ; 
          MOV  ES,AX       ;
NEXT_BYTE:   MOV  AL,ES:[BX]   ; 
          MOV  ES:[BX]+80,AL   ;   
          INC  BX          ;   
          LOOP NEXT_BYTE   ;

  2:

;---       
   MOV  AX,0A000H        ; 
   MOV  ES,AX            ;
   MOV  BX,0             ;    
;---   
   MOV  DX,3CEH          ;   
   MOV  AL,8             ;  
   OUT  DX,AL            ; 
   INC  DX               ;   
   MOV  AL,10000000B     ;  ,  7-
   OUT  DX,AL            ; 
;---  
   MOV  AL,ES:[BX]       ;  
   MOV  AL,4             ; 
   MOV  ES:[BX],AL       ; 

                             - 212 -

   4.4.4    .

         PCjr 
         
:          
.    EGA    ,   
DH  - 10H        -
.  EGA    ,    .
  ,   PCjr  EGA,  ,    
  ,       -
      ,      
.
           
EGA.     0  ,    
 ,    .  1  
    ,      1,  
      .   3  
     (0 =  0).   
     3CFH    -
  5   3CEH,    . -
      ,      -
,    0,   0  1,    
.    BIOS    
    0 (     0),      
     0,      0
  8,     1.
       0 ,      
  .      - -
,       .   
    0  3.      3CFH
     4   3CEH,    
.
     1  .     
         ,   
.        4  ;  4
 - .      3CFH -
   2   3CEH.   -
   ,      1
  ,   .    -
     (color don't care register)  
           .
  4       1;  
       ,    -
      .  ,  
    3 ( 3)     0110
      0010,   -
   ,       3  0,   -
      1.     -
   1011,   ,  -
  3   1.
          3CFH   -
  7   3CEH.  4     -
  .  ,   IBM ( 2  1984  .)
      , ..,  1 

                             - 213 -

     -
  .   .
                  
        .      0
 4  ,      -
,          -
 .    1,     ,  -
  16 ,       -
   ,         
.    EGA     ,
       .

    .

       POINT,     
.   ,    200   100
  Q = POINT(200,100).  ,   Q -
    .    , 
  ,      POINT    -1.
         WINDOW
[4.4.2],   POINT    .
   POINT       .
      ,     0,0
      , Q = POINT(1) -
  Q x- ,  Q = POINT(2) - y-.  
  WINDOW,  Q = POINT(3)  Q = POINT(4) -
 x-  y-   .     -
 WINDOW,       ,  
 .
             
  EGA (D-10H).       
     .     
  1     0001  1001:

100 OUT &H3CE,5         '  
110 OUT &H3CF,8         '   0
120 OUT &H3CE,2         '   
130 OUT &H3CF,1         '  0001
140 OUT &H3CE,7         '   
150 OUT &H3CF,7         '7 = 0111B,  . . 0001  1001
160 DEF SEG = &HA000    '   EGA
170 X = PEEK(0)         '  
180 IF X <> 0 THEN...   '..  0001  1001 

    .

    D  10H     .
BIOS     EGA ,     -
    .      (-
  0)  DX,    (   0) -
 CX.    AL.

                             - 214 -

;---    100,200
   MOV  AH,0DH       ;    
   MOV  DX,100       ; 
   MOV  CX,200       ; 
   INT  10H          ;    AL

    .

           PCjr  
     ,  -
  ,        [4.4.2].   
  ,     :

;---  (   )
   MOV  AH,ES:[BX]     ;    
   ROR  AH,CL          ; 2   
   AND  AH,00000011B   ;  
   RET                 ;  AH -  

       EGA  DH  10H     ,
   .          0
     2   A000:0012.

;---  
   MOV  DX,3CEH       ; 
   MOV  AL,5          ;   
   OUT  DX,AL         ; 
   INC  DX            ;   
   MOV  AL,0          ;   0
   OUT  DX,AL         ;
;---  ,   
   DEC  DX            ;   
   MOV  AL,4          ;   
   OUT  DX,AL         ; 
   INC  DX            ;   
   MOV  AL,2          ;   2
   OUT  DX,AL         ; 
;---  
   MOV  AX,0A000H     ; 
   MOV  ES,AX         ;
   MOV  BX,12         ;  
   MOV  AL,ES:[BX]    ;    2

,  ,     0010  1010   -
   1:

;---  
   MOV  DX,3CEH       ; 
   MOV  AL,5          ;   
   OUT  DX,AL         ; 
   INC  DX            ;   
   MOV  AL,8          ;  3   1
   OUT  DX,AL         ; 

                             - 215 -

;---   
   DEC  DX            ;   
   MOV  AL,2          ;   
   OUT  DX,AL         ; 
   INC  DX            ;   
   MOV  AL,0010B      ; 
   OUT  DX,AL         ; 
;---   
   DEC  DX            ;   
   MOV  AL,7          ;   
   OUT  DX,AL         ; 
   INC  DX            ;   
   MOV  AL,0111B      ;  1010  0010
   OUT  DX,AL         ; 
;--- 
   MOV  AX,0A000H     ; 
   MOV  ES,AX         ;
   MOV  BX,12         ;  
   MOV  AL,ES:[BX]    ;  
   CMP  AL,0          ; ?
   JNZ  FOUND_IT      ; ,     

                             - 216 -

   4.4.5    .

              ,
          -
 .    ,   
 .     ,     
  ,     .     
           , 
             
 .

    .

              
LINE. LINE (20,10)-(40,30)     20   10
  40   30.        .
      ,     
     ,     
  .       
  ,    LINE -STEP(xoff-
set,yoffset).
     LINE       .   
     ;  LINE (50,50)-(60,60),2
     2.     ,    
  3.       -
   .      -
,            .   ,  
1010101010101010,   &HAAAA,  , 
       .   -
       .   ,  LINE
(30,30)-(40,40),3,,&HAAAA      
3.
         -
  .     
LINE.         
   .    B (box - ..  -
)              .    LINE
(50,50)-(100,100),1,B,&HAAAA      50 
 1 ,   .    -
,       
 BF (      ).
      CIRCLE.     
  CIRCLE (x,y),r,,-,-,.  -
  x,y       ,   r -  
  ;    . 
-     ,       3.   
        ,     
-  - (  ,    -
).         -
,       .  
   ( 360    6.292 , 
   = 0.0174532 ).      -
   .    
,       5/6   -

                             - 217 -

  5/12    .     
,   ,   -  . 
 PI=3.14159:  CIRCLE(200,50),30,2,PI/2,PI,6   ,
     50,200,   30   -
 2,         -
  .
           DRAW,
  .   DRAW   (-
    ),      
   ,   .  , DRAW
"E12F12G12H12"    .     
 PSET (   [4.4.2]);    , 
   .       ,
      .  :

   Ux         ( x )
   Dx        
   Rx        
   Lx        
   Ex            
   Fx            
   Gx            
   Hx            

   100      100  
       (   
 y  x  5/6).    
    ,  .  -
      -
     ,      -
,    .
         ,   45 ,
   M.       
       .   -
           x   y. DRAW
"M50,60"     ,    50 
 60.        +
  -  .       x  
100,  +50        150,  -50 -  
50.           100,100   120,70     DRAW
"M+20,-30".
        .     
  B,     ,   
   . , DRAW "L10BU5R10"   -
   .       
           N.   
        -
 .
         ,     
  ,      ( 
       ).   
    C,      .   DRAW
"C2D5"  ,     2.  -
   ,     

                             - 218 -

  .       S,   
.    ,     
 4.      4,       1:1.
     8   ,      
   .      DRAW "S8U12D12" 
..
             -
 .   A      
90- . A0    . A1 - -
   90 ,  A2  -    180    A3 -  270
.  ,  TA     
  0  360 (   )   0  -360 (
 ).  DRAW "A1L10"  DRAW "TA90L10"   ,
 ,            
       90    
.
    DRAW       ,  
    .     -
         . 
  DRAW        X   
     . :

100 S$ = "U12R15U45L32"
110 DRAW "XS$;"

   DRAW    , -
  .  ,   ,   
   DRAW    .  -
        DRAW     ,
  , ,    .  -
        ,  
     .   ,  
  ,  ,   DRAW  "C=PCOLOR;".
  ,        -
    VARPTR$.     -
     DRAW  "X"  +  VARPTR$(S$)    DRAW  "C=" +
VARPTR$(PCOLOR).        
      .   -
 .  [4.4.6].

    .

          
  ,    .   
  BIOS         
    ,    -
    .          
    .    
   :     
,     .  
     1     ,   
  ;        -
 .    , 
         -

                             - 219 -

,   .  , ,     
   .  BX    -
,    ,    
.          
   :

;---  
START_X                   DW   0
END_X                     DW   319
START_Y                   DW   0
END_Y                     DW   199
COLOR                     DB   2
DIAGONAL_Y_INCREMENT      DW   ?
DIAGONAL_X_INCREMENT      DW   ?
SHORT_DISTANCE            DW   ?
STRAIGHT_X_INCREMENT      DW   ?
STRAIGHT_Y_INCREMENT      DW   ?
STRAIGHT_COUNT            DW   ?
DIAGONAL_COUNT            DW   ?

;---  
               MOV  AH,0       ;  
               MOV  AL,4       ; 320*200
               INT  10H        ; 
;---      
               MOV  CX,1       ;   x
               MOV  DX,1       ;   y
;---  
               MOV  DI,END_Y   ;  
               SUB  DI,START_Y ;   
               JGE  KEEP_Y     ;   < 0
               NEG  DX         ;   -1
               NEG  DI         ;    > 0
KEEP_Y:        MOV  DIAGONAL_Y_INCREMENT,DX
;---  
               MOV  SI,END_X   ;  
               SUB  SI,START_X ;   
               JGE  KEEP_X     ;   < 0
               NEG  CX         ;   -1
               NEG  SI         ;    > 0
KEEP_X:        MOV  DIAGONAL_Y_INCREMENT,CX
;---     
               CMP  SI,DI      ; ?
               JGE  HORZ_SEG   ; ,  
               MOV  CX,0       ;   x  
               XCHG SI,DI      ;   CX
               JMP  SAVE_VALUES; 
HORZ_SEG:      MOV  DX,0       ;     y
SAVE_VALUES:   MOV  SHORT_DISTANCE,DI  ; 
               MOV  STRAIGHT_X_INCREMENT,CX  ;   0,
               MOV  STRAIGHT_Y_INCREMENT,DX  ;  - 1.

                             - 220 -

;---  
               MOV  AX,SHORT_DISTANCE  ;   AX
               SHL  AX,1       ; 
               MOV  STRAIGHT_COUNT,AX  ; 
               SUB  AX,SI      ;2* - 
               MOV  BX,AX      ;   
               SUB  AX,SI      ;2* - 2*
               MOV  DIAGONAL_COUNT,AX  ;
;---   
               MOV  CX,START_X ;  x
               MOV  CX,START_Y ;  y
               INC  SI         ; 1  
               MOV  AL,COLOR   ;  
;---  
MAINLOOP:      DEC  SI         ;   
               JZ   LINE_FINISHED  ;   
               MOV  AH,12      ;  
               INT  10H        ; 
               CMP  BX,0       ; BX < 0,   
               JGE  DIAGONAL_LINE  ;  
;---  
               ADD  CX,STRAIGHT_X_INCREMENT  ; -
               ADD  DX,STRAIGHT_Y_INCREMENT  ;  
               ADD  BX,STRAIGHT_COUNT  ; 
               JMP  SHORT MAINLOOP  ;  
;---  
DIAGONAL_LINE: ADD  CX,DIAGONAL_X_INCREMENT  ; -
               ADD  DX,DIAGONAL_Y_INCREMENT  ;  
               ADD  BX,DIAGONAL_COUNT  ; 
               JMP  SHORT MAINLOOP  ;  
LINE_FINISHED:

                             - 221 -

   4.4.6   .

             
,      
    .      
  ,          
,         .
         -
              
   ,     -
    ,       
 .         
       ,      
   ,      .
    [4.3.4]        -
  8*8  ,    .      
        ,  
        .
   8*8      -
    ,    ,
     .    -
        .
        
   .

    .

       PAINT    
  .        
 ,     .   
  ,       , ,
PAINT  (100,110),2    2 .   
       ,   
   ,   .   ,  ,
           -
,        .   
     ,    ,
    .        
 ,    PAINT  (100,180),2,3 
  2    3.  , ,   -
   ,    "  ", .. 
   -        
 ,   ,    
      ,       
         -
.         -
   ,         
.      ,     
   .

100 LINE (50,70)-(270,130),1,B   '   
110 LINE (100,30)-(220,170),2,B  '   
120 PAINT (101,31),3,2           '   

                             - 222 -

,    LINE       ,  
    'BF',   'B'.  [4.4.5].
     PAINT   ""  ,  
        .  
,         4
    8   (8*8    ) -
     .      
,        -
  .         
10000011  4 ,       2, -
 2 -  ,   -  3.    -
  131  &H83 (.   ,   -
      ).       
11000010  193 (&HC1).          
    4     2   CHR$(&H83)  +
CHR$(&HC1).         8 , 
   8 .        PAINT
 .   ,   -
:

100 LINE (100,110)-(150,150),1,B     ' 
110 PAINT (125,125),CHR$(&H83)+CHR$(&HC1),1   ' 

,        
,    PAINT  ,     
.         
 PAINT.         ,  
    .
    DRAW,    ,  
 .    [4.4.5].  " " (
       )    
  ,     .
   DRAW     P,   -
         .  
     1 ,        3
  DRAW  "U10R10D10L10BH1P3,1".      
    ,   'BH'     
 ,   ,    'P'   -
  .           
. ,         
      . ,  
         , 
   .
              
  .    -
 ,         
 . ,      
,        GET.   
        [5.4.3],  
      .  GET
           
,  ,     ,
           .   
   ,     .  -
, GET (80,40)-(120,60),ARRAY3    , 

                             - 223 -

       ARRAY3.
  ,    ,     -
    DIM.      
 .         
        -
.       4 + INT ((x*
+ 7)/8)* y.   ""  1   
 2 -    .    x  y   
        -
.  INT    .  ,  
          
.      2    ,  4 -
        8 -      -
.
                
  PUT.     
     ,     
.           .
, PUT (40,30),ARRAY1   ,  
      40   30. 
PUT      ,  ,
   .     ,
         ,   
      GET.         PUT
(40,30),ARRAY1,PSET.       
.    PSET  PRESET,   0 -
     3  ,   1  -  
2  .
       ,    AND,
OR  XOR.    PRESET      PSET  -
 .       -
 .           
          .   
  ,      1 
 .     ,   
   2 ,    -
 .
   AND           
     (  ).    -
    ,      
         "".
     .    
          .  
      01,       
 - 10,         -
  00,    .
   OR    ,        
,    .   -  OR -
        .   
        
 .    1(01)  2(10)  3(11),
    0(00)  3(11).

                             - 224 -

   , , XOR   ,     
    .        -
-        (1
 1  0,  1  0 -  1).     
   .       
.      ,      
      ,    -
.     .     
,      -
 XOR   ,     ..

    .

           -
 .        , 
         -
 ,     .    ,
       ,  -
  ,    .   -
,           ,
         .  -
              
    ,   
       .  , 
    IBM PC     -
  BIOS,          -
   :

      MOV  AX,0B800H     ;ES    
      MOV  ES,AX         ;
      MOV  CX,8192       ;  
      MOV  AX,0          ;    0
      MOV  DI,0          ;DI     
REP   STOSW              ;  8192 

             ,
      .   
   ,         -
         .   
  ,          
  .        
 .
           -
     . ,  -
   1        
.     01,   -
    : 01010101.    NOT
   ,       10101010.
   XOR         ; 
  ,    ,   
  1    ,     .  
   NOT  ,   , -
        00.   
  TEST      00.    

                             - 225 -

 ,        
    .     
 ,    .

   MOV  AL,ES:[BX]    ;   
   XOR  AL,10101010B  ;    
   NOT  AL            ; 
   TEST AL,11000000B  ;  7-6
   JZ   FOUND_BOUND   ;   
   TEST AL,00110000B  ;  5-4
   JZ   FOUND_BOUND   ;   
   TEST AL,00001100B  ;  3-2
   JZ   FOUND_BOUND   ;   
   TEST AL,00000011B  ;  1-0
   JZ   FOUND_BOUND   ;   
   MOV  AL,FILL_COLOR ;  ,  
   MOV  ES:[BX],AL    ;   
    .
    .
FOUND_BOUND:

     ,  ,   
        ,  
  ,          
   .   ,     -
,        -
   [4.3.4]        -
.  ,        
,       ,      
     .

                             - 226 -

   4.4.7      -
.

         ,   
  ,      -
.          
      ,    
   8*8.      ,  -
    ,      [4.3.4]. 
,             
  .        -
 ,   .      
       
   .  ,      
    .

    .

         ,  2 
    2   .      [4.3.4]  
 1FH       , 
.        
DOS  BIOS.         ,  
        .   -
       , -
  ,   .

;---  
CHARACTER_DATA  DB   00110000B   ;  
                DB   01100111B
                DB   01100111B
                DB   00110011B
                DB   00011111B
                DB   00001111B
                DB   00001111B
                DB   00000111B

                DB   00000011B   ;  
                DB   10001100B
                DB   10011000B
                DB   00110000B
                DB   11100000B
                DB   11000000B
                DB   11000000B
                DB   10000000B

                DB   00001111B   ;  
                DB   00011111B
                DB   00011100B
                DB   00011000B
                DB   00011000B
                DB   00110000B
                DB   01100000B
                DB   00010000B

                             - 227 -

                DB   11000000B   ;  
                DB   11000000B
                DB   11000000B
                DB   11000000B
                DB   01100000B
                DB   01100000B
                DB   00010000B
                DB   00011110B
                DB   00000000B

;---  
   PUSH DS                ; DS
   MOV  DX,OFFSET CHAR_DATA  ;    DX
   MOV  AX,SEG CHAR_DATA  ;    DS
   MOV  DS,AX             ;
   MOV  AH,25H            ;  
   MOV  AL,1FH            ; 
   INT  21H               ; 
   POP  DS                ; DS

;--- 
;---    
   MOV  AH,2         ;  
   MOV  DH,13        ; 13
   MOV  DL,20        ; 20
   MOV  BH,0         ; 0
   INT  10H          ; 
;---   
   MOV  DL,128       ;  128
   MOV  AH,2         ; / 
   INT  21H          ; 
   MOV  DL,129       ;  129
   INT  21H          ; 
;---    
   MOV  DH,14        ; 14
   MOV  DL,20        ; 20
   MOV  AH,2         ;  
   INT  10H          ; 
;---   
   MOV  DL,130       ;  130
   MOV  AH,2         ; / 
   INT  21H          ; 
   MOV  DL,131       ;  131
   INT  21H          ; 